From 20bd8d1e478eaa1069007659589f84a1344818ad Mon Sep 17 00:00:00 2001 From: "rneugeba@wyvis.research.intel-research.net" Date: Wed, 16 Mar 2005 17:31:15 +0000 Subject: [PATCH] bitkeeper revision 1.1245.1.1 (42386d63YMsPB-xQ5vhzdFj1gbQ5kg) added counter for pagefaults Signed-off-by: michael.fetterman@cl.cam.ac.uk --- .../arch/xen/i386/kernel/syscall_stats.c | 10 ++++++++++ linux-2.6.10-xen-sparse/arch/xen/i386/mm/fault.c | 9 +++++++++ 2 files changed, 19 insertions(+) diff --git a/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/syscall_stats.c b/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/syscall_stats.c index e614a316f9..4e6e1ff2f7 100644 --- a/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/syscall_stats.c +++ b/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/syscall_stats.c @@ -19,12 +19,19 @@ unsigned long syscall_stats[NR_syscalls]; static unsigned char foobar[4]; +unsigned long c_do_page_fault; +unsigned long c_minor_page_fault; +unsigned long c_major_page_fault; + /* a write just resests the counter */ static ssize_t syscall_write(struct file *f, const char *data, size_t size, loff_t *pos) { printk("resetting syscall stats\n"); memset(&syscall_stats, 0, sizeof(syscall_stats)); + c_do_page_fault = 0; + c_minor_page_fault = 0; + c_major_page_fault = 0; return size; } @@ -36,6 +43,9 @@ static int show_syscall(struct seq_file *m, void *v) seq_printf(m, "%lu ", syscall_stats[i]); } seq_printf(m, "\n"); + seq_printf(m, "%lu %lu %lu\n", c_do_page_fault, + c_minor_page_fault, c_major_page_fault); + return 0; } diff --git a/linux-2.6.10-xen-sparse/arch/xen/i386/mm/fault.c b/linux-2.6.10-xen-sparse/arch/xen/i386/mm/fault.c index f5c7c16c68..ab55b4a562 100644 --- a/linux-2.6.10-xen-sparse/arch/xen/i386/mm/fault.c +++ b/linux-2.6.10-xen-sparse/arch/xen/i386/mm/fault.c @@ -216,6 +216,11 @@ fastcall void do_invalid_op(struct pt_regs *, unsigned long); * bit 1 == 0 means read, 1 means write * bit 2 == 0 means kernel, 1 means user-mode */ + +extern unsigned long c_do_page_fault; +extern unsigned long c_minor_page_fault; +extern unsigned long c_major_page_fault; + fastcall void do_page_fault(struct pt_regs *regs, unsigned long error_code, unsigned long address) { @@ -226,6 +231,8 @@ fastcall void do_page_fault(struct pt_regs *regs, unsigned long error_code, int write; siginfo_t info; + c_do_page_fault++; + /* Set the "privileged fault" bit to something sane. */ error_code &= 3; error_code |= (regs->xcs & 2) << 1; @@ -359,9 +366,11 @@ good_area: switch (handle_mm_fault(mm, vma, address, write)) { case VM_FAULT_MINOR: tsk->min_flt++; + c_minor_page_fault++; break; case VM_FAULT_MAJOR: tsk->maj_flt++; + c_major_page_fault++; break; case VM_FAULT_SIGBUS: goto do_sigbus; -- 2.30.2